
#ifndef MS_ROOMINFO_H
#define MS_ROOMINFO_H

#include "common.hpp"
#include "json.hpp"
#include "RTC/Router.hpp"

using json = nlohmann::json;

class RoomInfo
{
public:
    struct RoomState{
        json consumerLayers;
        uint64_t joinTs;
        uint64_t lastSeenTs;
        json media;
        json stats;
    };
public:
    RoomInfo();
    void OnChannelRequest(Channel::Request* request);
    void createRouter() ;
    void createAudioObserver();
    void FillJson(json& jsonObject) const;
    void FillJsonResourceUsage(json& jsonObject) const;
public:
    //router info
	RTC::Router *router;
    std::string routerId="onlyroom";
    std::string audioObserverId = "audio-observer-id";
    json routerRtpCapabilities;
    json routerAppData;
    json rtpMapping;
    json consumableRtpParameters;
    json audiortpMapping;
    json audioconsumableRtpParameters;
    json mediaCodecs;
    json rtpParameters;

    std::map<std::string,RoomState> roomStateMap;
    //用来获取状态的id序列信息
    std::vector<std::string> producerIndexMap;
    std::vector<std::string> consumerIndexMap;
    std::map<std::string,std::string> cnameMap;
    //房间里的推流连接信息  peerId : transportId
    std::map<std::string,std::string> pushTransportMap;
    //房间里的拉流连接信息  peerId : transportId
    std::map<std::string,std::string> pullTransportMap;
    //存储连接的生产者消费者信息 
    std::map<std::string,std::string> producerMap;
    std::map<std::string,std::string> consumerMap;
    RoomState roomState;
//     json routerRtpCapabilities = R"(
//   {
//     "codecs": [
//         {
//             "kind": "audio",
//             "mimeType": "audio/opus",
//             "clockRate": 48000,
//             "channels": 2,
//             "rtcpFeedback": [
//                 {
//                     "type": "transport-cc",
//                     "parameter": ""
//                 }
//             ],
//             "parameters": {},
//             "preferredPayloadType": 100
//         },
//         {
//             "kind": "video",
//             "mimeType": "video/VP8",
//             "clockRate": 90000,
//             "rtcpFeedback": [
//                 {
//                     "type": "nack",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "nack",
//                     "parameter": "pli"
//                 },
//                 {
//                     "type": "ccm",
//                     "parameter": "fir"
//                 },
//                 {
//                     "type": "goog-remb",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "transport-cc",
//                     "parameter": ""
//                 }
//             ],
//             "parameters": {},
//             "preferredPayloadType": 101
//         },
//         {
//             "kind": "video",
//             "mimeType": "video/rtx",
//             "preferredPayloadType": 102,
//             "clockRate": 90000,
//             "parameters": {
//                 "apt": 101
//             },
//             "rtcpFeedback": []
//         },
//         {
//             "kind": "video",
//             "mimeType": "video/H264",
//             "clockRate": 90000,
//             "parameters": {
//                 "packetization-mode": 1,
//                 "level-asymmetry-allowed": 1,
//                 "profile-level-id": "4d0032"
//             },
//             "rtcpFeedback": [
//                 {
//                     "type": "nack",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "nack",
//                     "parameter": "pli"
//                 },
//                 {
//                     "type": "ccm",
//                     "parameter": "fir"
//                 },
//                 {
//                     "type": "goog-remb",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "transport-cc",
//                     "parameter": ""
//                 }
//             ],
//             "preferredPayloadType": 103
//         },
//         {
//             "kind": "video",
//             "mimeType": "video/rtx",
//             "preferredPayloadType": 104,
//             "clockRate": 90000,
//             "parameters": {
//                 "apt": 103
//             },
//             "rtcpFeedback": []
//         },
//         {
//             "kind": "video",
//             "mimeType": "video/H264",
//             "clockRate": 90000,
//             "parameters": {
//                 "packetization-mode": 1,
//                 "level-asymmetry-allowed": 1,
//                 "profile-level-id": "42e01f"
//             },
//             "rtcpFeedback": [
//                 {
//                     "type": "nack",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "nack",
//                     "parameter": "pli"
//                 },
//                 {
//                     "type": "ccm",
//                     "parameter": "fir"
//                 },
//                 {
//                     "type": "goog-remb",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "transport-cc",
//                     "parameter": ""
//                 }
//             ],
//             "preferredPayloadType": 105
//         },
//         {
//             "kind": "video",
//             "mimeType": "video/rtx",
//             "preferredPayloadType": 106,
//             "clockRate": 90000,
//             "parameters": {
//                 "apt": 105
//             },
//             "rtcpFeedback": []
//         }
//     ],
//     "headerExtensions": [
//         {
//             "kind": "audio",
//             "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
//             "preferredId": 1,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
//             "preferredId": 1,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",
//             "preferredId": 2,
//             "preferredEncrypt": false,
//             "direction": "recvonly"
//         },
//         {
//             "kind": "video",
//             "uri": "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",
//             "preferredId": 3,
//             "preferredEncrypt": false,
//             "direction": "recvonly"
//         },
//         {
//             "kind": "audio",
//             "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",
//             "preferredId": 4,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",
//             "preferredId": 4,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "audio",
//             "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",
//             "preferredId": 5,
//             "preferredEncrypt": false,
//             "direction": "recvonly"
//         },
//         {
//             "kind": "video",
//             "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",
//             "preferredId": 5,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07",
//             "preferredId": 6,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "urn:ietf:params:rtp-hdrext:framemarking",
//             "preferredId": 7,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "audio",
//             "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level",
//             "preferredId": 10,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "urn:3gpp:video-orientation",
//             "preferredId": 11,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         },
//         {
//             "kind": "video",
//             "uri": "urn:ietf:params:rtp-hdrext:toffset",
//             "preferredId": 12,
//             "preferredEncrypt": false,
//             "direction": "sendrecv"
//         }
//     ]
// }
// )"_json;
    
//     json mediaCodecs= R"(
//   [
//     {
//         "kind": "audio",
//         "mimeType": "audio/opus",
//         "clockRate": 48000,
//         "channels": 2
//     },
//     {
//         "kind": "video",
//         "mimeType": "video/VP8",
//         "clockRate": 90000,
//         "parameters": {}
//     },
//     {
//         "kind": "video",
//         "mimeType": "video/h264",
//         "clockRate": 90000,
//         "parameters": {
//             "packetization-mode": 1,
//             "profile-level-id": "4d0032",
//             "level-asymmetry-allowed": 1
//         }
//     },
//     {
//         "kind": "video",
//         "mimeType": "video/h264",
//         "clockRate": 90000,
//         "parameters": {
//             "packetization-mode": 1,
//             "profile-level-id": "42e01f",
//             "level-asymmetry-allowed": 1
//         }
//     }
// ]
// )"_json;
//     json rtpMapping= R"(
//   {
//     "codecs": [
//         {
//             "payloadType": 96,
//             "mappedPayloadType": 101
//         },
//         {
//             "payloadType": 97,
//             "mappedPayloadType": 102
//         }
//     ],
//     "encodings": [
//         {
//             "mappedSsrc": 538135191,
//             "rid": "r0",
//             "scalabilityMode": "S1T3"
//         },
//         {
//             "mappedSsrc": 538135192,
//             "rid": "r1",
//             "scalabilityMode": "S1T3"
//         }
//     ]
// }
// )"_json;
//     json consumableRtpParameters= R"(
//   {
//     "codecs": [
//         {
//             "mimeType": "video/VP8",
//             "payloadType": 101,
//             "clockRate": 90000,
//             "parameters": {},
//             "rtcpFeedback": [
//                 {
//                     "type": "nack",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "nack",
//                     "parameter": "pli"
//                 },
//                 {
//                     "type": "ccm",
//                     "parameter": "fir"
//                 },
//                 {
//                     "type": "goog-remb",
//                     "parameter": ""
//                 },
//                 {
//                     "type": "transport-cc",
//                     "parameter": ""
//                 }
//             ]
//         },
//         {
//             "mimeType": "video/rtx",
//             "payloadType": 102,
//             "clockRate": 90000,
//             "parameters": {
//                 "apt": 101
//             },
//             "rtcpFeedback": []
//         }
//     ],
//     "headerExtensions": [
//         {
//             "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
//             "id": 1,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",
//             "id": 4,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",
//             "id": 5,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07",
//             "id": 6,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "urn:ietf:params:rtp-hdrext:framemarking",
//             "id": 7,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "urn:3gpp:video-orientation",
//             "id": 11,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "urn:ietf:params:rtp-hdrext:toffset",
//             "id": 12,
//             "encrypt": false,
//             "parameters": {}
//         }
//     ],
//     "encodings": [
//         {
//             "active": true,
//             "scaleResolutionDownBy": 4,
//             "maxBitrate": 96000,
//             "scalabilityMode": "S1T3",
//             "dtx": false,
//             "ssrc": 538135191
//         },
//         {
//             "active": true,
//             "scaleResolutionDownBy": 1,
//             "maxBitrate": 680000,
//             "scalabilityMode": "S1T3",
//             "dtx": false,
//             "ssrc": 538135192
//         }
//     ],
//     "rtcp": {
//         "cname": "",
//         "reducedSize": true,
//         "mux": true
//     }
// }
// )"_json;
//     json audiortpMapping= R"(
//   {
//     "codecs": [
//         {
//             "payloadType": 111,
//             "mappedPayloadType": 100
//         }
//     ],
//     "encodings": [
//         {
//             "mappedSsrc": 618504650,
//             "ssrc": 1971670989
//         }
//     ]
// }
// )"_json;
//     json audioconsumableRtpParameters= R"(
//   {
//     "codecs": [
//         {
//             "mimeType": "audio/opus",
//             "payloadType": 100,
//             "clockRate": 48000,
//             "channels": 2,
//             "parameters": {
//                 "minptime": 10,
//                 "useinbandfec": 1
//             },
//             "rtcpFeedback": [
//                 {
//                     "type": "transport-cc",
//                     "parameter": ""
//                 }
//             ]
//         }
//     ],
//     "headerExtensions": [
//         {
//             "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
//             "id": 1,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",
//             "id": 4,
//             "encrypt": false,
//             "parameters": {}
//         },
//         {
//             "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level",
//             "id": 10,
//             "encrypt": false,
//             "parameters": {}
//         }
//     ],
//     "encodings": [
//         {
//             "ssrc": 618504650,
//             "dtx": false
//         }
//     ],
//     "rtcp": {
//         "cname": "0Cn91iZVKluwWvgG",
//         "reducedSize": true,
//         "mux": true
//     }
// }
// )"_json;



    
};



#endif